package main

import (
	"fmt"
	"math"
	"strconv"
)

// 给定一个表示 大整数 的整数数组 digits，
// 其中 digits[i] 是整数的第 i 位数字。
// 这些数字按从左到右，从最高位到最低位排列。
// 这个大整数不包含任何前导 0。
// 将大整数加 1，并返回结果的数字数组。
func plusOne(digits []int) []int {
	//切片转整数
	num := 0
	start_index := 0
	strart_len := len(digits)
	for i := strart_len; i >= 1; i-- {
		num += digits[start_index] * int(math.Pow(10, float64(strart_len-1)))
		start_index++
		strart_len--
	}
	nums := strconv.Itoa(num + 1)
	fmt.Println("nums", nums)
	slience := make([]int, 0)
	for _, v := range nums {
		fmt.Println(v)
		slience = append(slience, int(v-'0'))
	}
	return slience
}

// 官方版本
func plusOne1(digits []int) []int {
	n := len(digits)
	for i := n - 1; i >= 0; i-- {
		if digits[i] != 9 {
			digits[i]++
			fmt.Println("当前i=", i)
			fmt.Println("当前n=", n)
			for j := i + 1; j < n; j++ {
				digits[j] = 0
			}
			return digits
		}
	}
	// digits 中所有的元素均为 9
	digits = make([]int, n+1)
	digits[0] = 1
	return digits
}

func main() {
	// fmt.Println(plusOne([]int{2, 5, 3, 7}))
	fmt.Println(plusOne1([]int{2, 5, 9, 9}))

}
